// src/common/http.js

// 基础URL（根据实际环境切换）
const baseUrl = 'http://localhost:8089'; // 本地开发环境
// const baseUrl = 'http://192.168.31.70:8089'; // 测试环境

// *
//  * 封装uni.request的通用请求方法
//  * @param {Object} options 请求配置
//  * @returns {Promise} 返回Promise对象

const http = (options = {}) => {
    return new Promise((resolve, reject) => {
        uni.request({
            url: baseUrl + (options.url || ''), // 请求地址
            method: options.method || 'GET', // 请求方法，默认为GET
            data: options.data || {}, // 请求参数
            header: options.header || {}, // 请求头
        }).then((response) => {
            // 请求成功处理
            if (response.data && response.data.code === 200) {
                resolve(response.data); // 返回成功数据
            } else {
                uni.showToast({
                    icon: 'none',
                    title: response.data.msg || '请求失败', // 提示信息
                    duration: 2000, // 提示持续时间
                });
                reject(response.data); // 返回失败数据
            }
        }).catch((error) => {
            // 请求异常处理
            uni.showToast({
                icon: 'none',
                title: '网络请求异常', // 提示信息
                duration: 2000,
            });
            reject(error); // 返回错误信息
        });
    });
};

// *
//  * GET请求封装
//  * @param {String} url 请求地址
//  * @param {Object} data 请求参数
//  * @param {Object} options 其他配置
//  * @returns {Promise} 返回Promise对象

const get = (url, data = {}, options = {}) => {
    options.method = 'GET'; // 请求方法
    options.data = data; // 请求参数
    options.url = url; // 请求地址
    return http(options);
};

// *
//  * POST请求封装
//  * @param {String} url 请求地址
//  * @param {Object} data 请求参数
//  * @param {Object} options 其他配置
//  * @returns {Promise} 返回Promise对象

const post = (url, data = {}, options = {}) => {
    options.method = 'POST'; // 请求方法
    options.data = data; // 请求参数
    options.url = url; // 请求地址
    return http(options);
};

// *
//  * PUT请求封装
//  * @param {String} url 请求地址
//  * @param {Object} data 请求参数
//  * @param {Object} options 其他配置
//  * @returns {Promise} 返回Promise对象

const put = (url, data = {}, options = {}) => {
    options.method = 'PUT'; // 请求方法
    options.data = data; // 请求参数
    options.url = url; // 请求地址
    return http(options);
};

// *
//  * DELETE请求封装
//  * @param {String} url 请求地址
//  * @param {Object} data 请求参数
//  * @param {Object} options 其他配置
//  * @returns {Promise} 返回Promise对象

const del = (url, data = {}, options = {}) => {
    options.method = 'DELETE'; // 请求方法
    options.data = data; // 请求参数
    options.url = url; // 请求地址
    return http(options);
};

const upload = (parm) => {
    return new Promise((resolve, reject) => {
        uni.uploadFile({
            url: baseUrl + parm.url,
            filePath: parm.filePath,
            name: "file",
            formData: {
                openid: uni.getStorageSync("openid"),
            },
            header: {},
            success: (res) => {
                resolve(res.data);
            },
            fail: (error) => {
                reject(error);
            },
        });
    });
};

// 导出方法
export default {
    http,
    get,
    post,
    put,
    del,
    upload,
    baseUrl
};